# -*- coding: utf-8 -*-
"""
增强版日志工具库：
- 保留原有 APICallLogger 的 API 调用记录功能
- 新增通用日志记录能力（INFO/WARNING/ERROR 等）
"""

import time
from datetime import datetime
from pathlib import Path


class APICallLogger:
    """
    支持两种日志模式：
    1. API 调用日志：log_api_call(api_input, operator)
    2. 通用系统日志：log_message("INFO", "模型开始训练...")
    """

    def __init__(self, root_path: str = ".", log_prefix: str = "run"):
        """
        初始化日志记录器

        :param root_path: 项目根路径
        :param log_prefix: 日志文件前缀
        """
        self.root_path = Path(root_path).resolve()
        self.log_dir = self.root_path / "log"
        self.log_dir.mkdir(exist_ok=True)

        timestamp = time.strftime("%Y%m%d_%H%M%S")
        self.log_filename = f"{log_prefix}_{timestamp}.log"
        self.log_filepath = self.log_dir / self.log_filename

        self._write_line(f"--- 日志会话开始于 {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} ---")

    def _write_line(self, message: str):
        """内部方法：向日志文件追加一行"""
        with open(self.log_filepath, "a", encoding="utf-8") as f:
            f.write(message + "\n")

    # ========== 原有 API 调用日志接口（保持不变）==========
    def log_api_call(self, api_input: str, operator: str):
        """
        记录一次 API 调用（兼容旧代码）
        """
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        log_line = f"[{current_time}] {operator}: {api_input}"
        self._write_line(log_line)

    # ========== 新增：通用日志接口 ==========
    def log_message(self, level: str, message: str):
        """
        记录一条通用系统日志

        :param level: 日志级别，如 "INFO", "WARNING", "ERROR"
        :param message: 日志内容
        """
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        log_line = f"[{current_time}] [{level.upper()}] {message}"
        self._write_line(log_line)

    def info(self, message: str):
        """快捷方法：记录 INFO 级别日志"""
        self.log_message("INFO", message)

    def warning(self, message: str):
        """快捷方法：记录 WARNING 级别日志"""
        self.log_message("WARNING", message)

    def error(self, message: str):
        """快捷方法：记录 ERROR 级别日志"""
        self.log_message("ERROR", message)

    def get_log_path(self) -> str:
        """返回当前日志文件的完整路径"""
        return str(self.log_filepath)